package com.ruoyi.system.service.impl;

import java.util.*;

import com.ruoyi.common.core.domain.Ztree;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.ObjectNameMapper;
import com.ruoyi.system.domain.ObjectName;
import com.ruoyi.system.service.IObjectNameService;
import com.ruoyi.common.core.text.Convert;

/**
 * 过程Service业务层处理
 * 
 * @author ruoyi
 * @date 2020-02-21
 */
@Service
public class ObjectNameServiceImpl implements IObjectNameService 
{
    @Autowired
    private ObjectNameMapper objectNameMapper;

    /**
     * 查询过程
     * 
     * @param objectId 过程ID
     * @return 过程
     */
    @Override
    public ObjectName selectObjectNameById(Long objectId)
    {
        return objectNameMapper.selectObjectNameById(objectId);
    }


    /**
     * 查询过程列表
     * 
     * @param objectName 过程
     * @return 过程
     */
    @Override
    public List<ObjectName> selectObjectNameList(ObjectName objectName)
    {
        return objectNameMapper.selectObjectNameList(objectName);
    }

    /**
     * 新增过程
     * 
     * @param objectName 过程
     * @return 结果
     */
    @Override
    public int insertObjectName(ObjectName objectName)
    {
        objectName.setCreateTime(DateUtils.getNowDate());
        return objectNameMapper.insertObjectName(objectName);
    }

    /**
     * 修改过程
     * 
     * @param objectName 过程
     * @return 结果
     */
    @Override
    public int updateObjectName(ObjectName objectName)
    {
        objectName.setUpdateTime(DateUtils.getNowDate());
        return objectNameMapper.updateObjectName(objectName);
    }

    /**
     * 删除过程对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteObjectNameByIds(String ids)
    {
        return objectNameMapper.deleteObjectNameByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除过程信息
     * 
     * @param objectId 过程ID
     * @return 结果
     */
    @Override
    public int deleteObjectNameById(Long objectId)
    {
        return objectNameMapper.deleteObjectNameById(objectId);
    }

    /**
     * 查询过程树列表
     * 
     * @return 所有过程信息
     */
    @Override
    public List<Ztree> selectObjectNameTree()
    {
        List<ObjectName> objectNameList = objectNameMapper.selectObjectNameList(new ObjectName());
        List<Ztree> ztrees = new ArrayList<Ztree>();
        for (ObjectName objectName : objectNameList)
        {
            Ztree ztree = new Ztree();
            ztree.setId(objectName.getObjectId());
            ztree.setpId(objectName.getParentId());
            ztree.setName(objectName.getObjectName());
            ztree.setTitle(objectName.getObjectName());
            ztrees.add(ztree);
        }
        return ztrees;
    }

    /**
     * 查询临时数据
     *
     * @return 过程
     */
    public List<ObjectName> getObjetcName()
    {

        List<ObjectName> objetcName = objectNameMapper.getObjetcName();
        return objetcName;
    }



    @Override
    public  List<ObjectName> getObjetcNameParentByObectId(Long objectId) {

        /*
            定义一个集合来存放查出的所有数据， 第一条数据为objectId的父类数据
                                             第二条数据为父类数据的 父数据
                                             依次类推。。。。。
         */
        List<ObjectName> objectNames = new ArrayList<>();



        ObjectName objetcName = objectNameMapper.getObjetcNameByObectId(objectId);
        ObjectName objetcName1 = objectNameMapper.selectObjectNameById(objectId);
        objectNames.add(objetcName1);

        // 此时说明当数据没有  上级父数据
        if(objetcName == null){
            return objectNames;
        }else {
            objectNames.add(objetcName);

            while(objectNames.get(objectNames.size()-1).getParentId()!=0){
                objetcName =  objectNameMapper.getObjetcNameByObectId(objectNames.get(objectNames.size()-1).getObjectId());
                if(objetcName==null){
                  break;
                }
                objectNames.add(objetcName);
            }
            return objectNames;
        }
    }
}
